"""
使用示例
展示如何使用 marketStream 获取 Binance 行情数据
"""

import os
from datetime import datetime, timedelta
from src.marketStream import BinanceDataClient


def main():
    """主函数 - 演示如何使用"""
    print("=" * 60)
    print("marketStream 使用示例")
    print("=" * 60)

    # 设置 API 密钥（从环境变量读取）
    api_key = os.getenv('BINANCE_API_KEY')
    api_secret = os.getenv('BINANCE_API_SECRET')

    if not api_key or not api_secret:
        print("⚠️  警告：未设置 API 密钥，将使用公开 API 模式")
        print("   公开 API 仅支持部分功能")
        print("   建议设置 BINANCE_API_KEY 和 BINANCE_API_SECRET 环境变量")
        print()
    else:
        print("✓ 使用 API 密钥认证模式")
        print()

    try:
        # 创建客户端
        print("1. 创建 Binance 数据客户端...")
        client = BinanceDataClient()
        print("   ✓ 客户端创建成功")
        print()

        # 验证交易对
        print("2. 验证交易对...")
        symbol = 'BTCUSDT'
        if client.validate_symbol(symbol):
            print(f"   ✓ 交易对 {symbol} 存在")
        else:
            print(f"   ✗ 交易对 {symbol} 不存在")
            return
        print()

        # 获取最新 5 条 K 线数据
        print("3. 获取最新 5 条 1小时 K 线数据...")
        klines = client.get_klines(
            symbol=symbol,
            interval='1h',
            limit=5
        )

        print(f"   ✓ 获取到 {len(klines)} 条数据")
        print()
        print("   最新 5 条 K 线数据：")
        for i, kline in enumerate(klines, 1):
            print(f"   [{i}] 时间: {datetime.fromtimestamp(kline['open_time'] / 1000)}")
            print(f"        开盘: {kline['open']:.2f}")
            print(f"        最高: {kline['high']:.2f}")
            print(f"        最低: {kline['low']:.2f}")
            print(f"        收盘: {kline['close']:.2f}")
            print(f"        成交量: {kline['volume']:.4f}")
            print()
        print()

        # 获取指定时间范围的数据
        print("4. 获取指定时间范围的 5分钟 K 线数据...")
        end_time = datetime.now()
        start_time = end_time - timedelta(hours=1)

        klines_range = client.get_klines(
            symbol=symbol,
            interval='5m',
            start_time=start_time,
            end_time=end_time,
            limit=100
        )

        print(f"   ✓ 获取到 {len(klines_range)} 条数据")
        print(f"   时间范围: {start_time} - {end_time}")
        print()

        # 显示支持的交易对
        print("5. 获取支持的时间周期...")
        intervals = ['5m', '1h', '4h']
        print(f"   ✓ 支持的时间周期: {', '.join(intervals)}")
        print()

        print("=" * 60)
        print("✓ 示例运行完成")
        print("=" * 60)
        print()
        print("API 使用方式：")
        print("  GET /api/klines?symbol=BTCUSDT&interval=1h&limit=10")
        print()
        print("查询参数：")
        print("  - symbol: 交易对符号（如 BTCUSDT）")
        print("  - interval: 时间周期（5m, 1h, 4h）")
        print("  - start_time: 开始时间（可选，格式: YYYY-MM-DD HH:MM）")
        print("  - end_time: 结束时间（可选，格式: YYYY-MM-DD HH:MM）")
        print("  - limit: 返回条数（可选，默认 500，最大 1500）")

    except Exception as e:
        print(f"✗ 运行错误: {e}")
        print()
        print("请检查：")
        print("1. 是否已设置正确的 API 密钥")
        print("2. 网络连接是否正常")
        print("3. Binance API 服务是否可用")


if __name__ == '__main__':
    main()
